如何使用 OkHttp3 实现 Android 的 WebSocket 多客户端通信

您所在的位置:网站首页 websocket android 如何使用 OkHttp3 实现 Android 的 WebSocket 多客户端通信

如何使用 OkHttp3 实现 Android 的 WebSocket 多客户端通信

2024-03-23 04:38| 来源: 网络整理| 查看: 265

public class WebSocketUtil { private static final int NORMAL_CLOSURE_STATUS = 1000; private final OkHttpClient client = new OkHttpClient(); private WebSocket socket; private WebSocketListener listener; private Map webSockets = new ConcurrentHashMap(); public void connect(String url) { Request request = new Request.Builder().url(url).build(); listener = new WebSocketListener() { @Override public void onOpen(WebSocket webSocket, Response response) { } @Override public void onMessage(WebSocket webSocket, String text) { // 接收到服务端发来的消息 Log.d("WebSocket", "onMessage: " + text); } @Override public void onMessage(WebSocket webSocket, ByteString bytes) { // 接收到服务端发来的消息 Log.d("WebSocket", "onMessage: " + bytes.toString()); } @Override public void onClosing(WebSocket webSocket, int code, String reason) { webSocket.close(NORMAL_CLOSURE_STATUS, null); } @Override public void onFailure(WebSocket webSocket, Throwable t, Response response) { Log.e("WebSocket", "onFailure", t); } }; socket = client.newWebSocket(request, listener); } public void send(String message, String targetClientId) { if (!TextUtils.isEmpty(targetClientId)) { // 向指定客户端发送消息 WebSocket targetSocket = webSockets.get(targetClientId); if (targetSocket != null) { targetSocket.send(message); } } else { // 向所有客户端发送消息 socket.send(message); } } public void disconnect() { if (socket != null) { socket.close(NORMAL_CLOSURE_STATUS, null); } client.dispatcher().executorService().shutdown(); } public void addWebSocket(String clientId, WebSocket webSocket) { webSockets.put(clientId, webSocket); } public void removeWebSocket(String clientId) { webSockets.remove(clientId); } }

在上面的代码中,我们在 WebSocketUtil 类中封装了几个方法,分别用于连接 WebSocket 服务器、向客户端发送消息、断开连接等。其中,我们使用了 ConcurrentHashMap 来存储多个客户端的 WebSocket 连接,以支持向特定客户端发送消息。

以下是一个使用示例:

// 连接 WebSocket 服务器 WebSocketUtil webSocketUtil = new WebSocketUtil(); webSocketUtil.connect("ws://10.0.0.2:8080"); // 发送消息 webSocketUtil.send("hello, world!", null); // 向所有客户端发送消息 String targetClientId = "abcde"; // 指定某个客户端 webSocketUtil.send("hello, client!", targetClientId); // 向特定客户端发送消息 // 在 WebSocket 连接中添加新的客户端 WebSocket ws = ... // 新的 WebSocket 连接 String clientId = "12345"; // 客户端的 ID webSocketUtil.addWebSocket(clientId, ws); // 从 WebSocket 连接中移除客户端 webSocketUtil.removeWebSocket(clientId); // 断开 WebSocket 连接 webSocketUtil.disconnect();

在上面的代码中,我们首先调用 WebSocketUtil 中的 connect() 方法来连接 WebSocket 服务器。在连接成功后,我们可以使用 send() 方法向客户端发送消息,包括向所有客户端或向特定客户端发送。在服务端接收到消息时,会分别触发 onMessage() 回调,你可以在回调中处理接收到的消息。

此外,我们还实现了 addWebSocket() 方法和 removeWebSocket() 方法,以便在 WebSocket 连接中添加新的客户端并移除已连接的客户端,以满足客户端上下线的需求。

这个工具类能够支持 WebSocket 发送和接收各种类型的数据,例如 String、ByteString 等,你可以在 onMessage() 回调中对不同类型的数据进行不同的处理,以满足你的需求。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3